package i_grafica;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.vecmath.Point3d;

import comunicacion.ParametrosEntorno;

import estrategia.Controlador;
import estrategia.ParametrosGlobales;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Principal extends javax.swing.JFrame implements ActionListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JButton boton1;
	private JScrollPane jScrollPane1;
	private JScrollPane jScrollPane2;
	private JLabel labelY4;
	private JLabel labelX4;
	private JButton botonCargarSimulacion;
	private JButton botonGuardarSimulacion;
	private JButton botonRetroceder;
	private JButton botonAvanzar;
	private JButton botonReset;
	private JLabel labelAnguloEntradaY;
	private JLabel labelAnguloEntradaX;
	private JTextField textoAnguloEntradaY;
	private JTextField textoAnguloEntradaX;
	private JButton botonPotencialUnidireccional;
	private JButton botonDirect;
	private JButton botonActualizar;
	private JTextField textCantObjetos;
	private JLabel labelCantidadObj;
	private JButton botonComenzarTrayectoria;
	private JButton botonBorrarPuntos;
	private JButton botonSalvar;
	private JComboBox comboModo;
	private JTextField textMAC;
	private JTextField textMI_ROBOT;
	private JTextField textPuerto;
	private JTextField textIP;
	private JLabel labelMAC;
	private JLabel labelMI_ROBOT;
	private JLabel labelPuerto;
	private JLabel labelIP;
	private JLabel labelModo;
	private JButton botonConfiguracion;
	private JTextField textR4;
	private JLabel labelR4;
	private JButton botonPontencial;
	private JButton botonLyapunov;
	private JButton botonGiroYAvanzo;
	private JTextField textY4;
	private JTextField textX4;
	private JButton botonAnguloOK;
	private JTextField textAngulo;
	private JLabel labelAngulo;
	private JTable tablaTrayectoria;
	private JLabel labelX;
	private JLabel labelY;
	private JTextField textNuevoPtoY;
	private JTextField textNuevoPtoX;
	private JButton botonNuevoPunto;
	private JButton botonSalir;
	private JButton bontonStop;
	private JTable tablaPosiciones;
	private JButton boton5;
	private JButton boton4;
	private JButton boton3;
	private JButton boton2;
	
	/**
	 * Variables para el manejo l�gico
	 * */
	private Controlador entorno_real = null;
	private Controlador simulador = null;
	
	// TODO Estas constantes habria que volarlas
	private String IP = "127.0.0.1";
	private int PUERTO = 1234;

	private DefaultTableModel tablaTrayectoriaModel;
	private DefaultTableModel tablaPosicionesModel;
	private Controlador control;
	public static List<FuncionalidadD> listaDaemons;

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Principal inst = new Principal();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public Principal() {
		super();
		try {			
			listaDaemons = new ArrayList<FuncionalidadD>();
			//entorno_real = new Controlador(ParametrosEntorno.CONECTAR_CON_ENTORNO_REAL);
			simulador = new Controlador(ParametrosEntorno.CONECTAR_CON_SIMULADOR);
			//control = entorno_real;
			control = simulador;
			
		} catch (IOException e) {			
			e.printStackTrace();			
		}
		
		initGUI();		
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			this.setTitle("IA Y R Laboratorio 2");
			{
				boton1 = new JButton();
				getContentPane().add(boton1);
				boton1.setText("Ver Coordenadas");
				boton1.setBounds(0, 0, 153, 61);
				boton1.setActionCommand("ver coordenadas");
				boton1.addActionListener(this);
			}
			{
				boton2 = new JButton();
				getContentPane().add(boton2);
				boton2.setText("Avanzar trayectoria");
				boton2.setBounds(0, 117, 153, 61);
				boton2.setActionCommand("avanzar trayectoria");
				boton2.addActionListener(this);
			}
			{
				boton3 = new JButton();
				getContentPane().add(boton3);
				boton3.setText("Extras");
				boton3.setBounds(0, 177, 153, 56);
				boton3.setActionCommand("extras");
				boton3.addActionListener(this);
			}
			{
				boton4 = new JButton();
				getContentPane().add(boton4);
				boton4.setText("Ir a un pto fijo");
				boton4.setBounds(0, 60, 153, 59);
				boton4.setActionCommand("ir a un pto fijo");
				boton4.addActionListener(this);
			}
			{
				boton5 = new JButton();
				getContentPane().add(boton5);
				boton5.setText("Beep!!");
				boton5.setBounds(207, 397, 119, 35);
				boton5.setActionCommand("beep");
				boton5.addActionListener(this);
			}
			{
				jScrollPane1 = new JScrollPane();
				getContentPane().add(jScrollPane1);
				jScrollPane1.setBounds(207, 22, 437, 325);
				jScrollPane1.setVisible(false);
				jScrollPane1.setVisible(false);
				{
					tablaPosicionesModel = 
						new DefaultTableModel(
								null,
								new String[] { "Id", "X" ,"Y","Rot"});
					tablaPosiciones = new JTable();
					jScrollPane1.setViewportView(tablaPosiciones);
					tablaPosiciones.setModel(tablaPosicionesModel);
					tablaPosiciones.setBounds(199, 24, 451, 312);					
				}
			}
			{
				bontonStop = new JButton();
				getContentPane().add(bontonStop);
				bontonStop.setText("Detener motores");
				bontonStop.setBounds(342, 398, 124, 32);
				bontonStop.setActionCommand("detener motores");
				bontonStop.addActionListener(this);
			}
			{
				botonSalir = new JButton();
				getContentPane().add(botonSalir);
				botonSalir.setText("Salir");
				botonSalir.setBounds(0, 397, 153, 52);
				botonSalir.setActionCommand("salir");
				botonSalir.addActionListener(this);
			}
			{
				botonNuevoPunto = new JButton();
				getContentPane().add(botonNuevoPunto);
				botonNuevoPunto.setText("Agregar punto");
				botonNuevoPunto.setBounds(205, 132, 119, 26);
				botonNuevoPunto.setActionCommand("agregar punto");
				botonNuevoPunto.setVisible(false);
				botonNuevoPunto.addActionListener(this);
			}
			{
				textNuevoPtoX = new JTextField();
				getContentPane().add(textNuevoPtoX);
				textNuevoPtoX.setBounds(232, 46, 62, 22);
				textNuevoPtoX.setVisible(false);
			}
			{
				textNuevoPtoY = new JTextField();
				getContentPane().add(textNuevoPtoY);
				textNuevoPtoY.setBounds(234, 82, 61, 22);
				textNuevoPtoY.setVisible(false);
			}
			{
				labelY = new JLabel();
				getContentPane().add(labelY);
				labelY.setText("Y:");
				labelY.setBounds(203, 85, 19, 16);
				labelY.setVisible(false);
			}
			{
				labelX = new JLabel();
				getContentPane().add(labelX);
				labelX.setText("X:");
				labelX.setBounds(203, 49, 36, 16);
				labelX.setVisible(false);
			}
			{
				jScrollPane2 = new JScrollPane();
				getContentPane().add(jScrollPane2);
				jScrollPane2.setBounds(358, 40, 269, 323);
				jScrollPane2.setVisible(false);
				{
					tablaTrayectoriaModel = 
						new DefaultTableModel(
								null,
								new String[] { "X", "Y" });
					tablaTrayectoria = new JTable();
					jScrollPane2.setViewportView(tablaTrayectoria);
					tablaTrayectoria.setModel(tablaTrayectoriaModel);
					tablaTrayectoria.setBounds(383, 41, 269, 323);
				}
			}
			{
				labelAngulo = new JLabel();
				getContentPane().add(labelAngulo);
				labelAngulo.setText("Angulo");
				labelAngulo.setBounds(215, 42, 50, 18);
				labelAngulo.setVisible(false);
			}
			{
				textAngulo = new JTextField();
				getContentPane().add(textAngulo);
				textAngulo.setBounds(290, 42, 62, 22);
				textAngulo.setVisible(false);
			}
			{
				botonAnguloOK = new JButton();
				getContentPane().add(botonAnguloOK);
				botonAnguloOK.setText("Rotar");
				botonAnguloOK.setBounds(389, 41, 120, 27);
				botonAnguloOK.addActionListener(this);
				botonAnguloOK.setActionCommand("angulo ok");
				botonAnguloOK.setVisible(false);
			}
			{
				textX4 = new JTextField();
				getContentPane().add(textX4);
				textX4.setBounds(238, 63, 62, 22);
				textX4.setVisible(false);
			}
			{
				textY4 = new JTextField();
				getContentPane().add(textY4);
				textY4.setBounds(240, 103, 62, 22);
				textY4.setVisible(false);
			}
			{
				labelX4 = new JLabel();
				getContentPane().add(labelX4);
				labelX4.setText("X:");
				labelX4.setBounds(208, 66, 30, 16);
				labelX4.setVisible(false);
			}
			{
				labelY4 = new JLabel();
				getContentPane().add(labelY4);
				labelY4.setText("Y:");
				labelY4.setBounds(208, 106, 20, 16);
				labelY4.setVisible(false);
			}
			{
				botonGiroYAvanzo = new JButton();
				getContentPane().add(botonGiroYAvanzo);
				botonGiroYAvanzo.setText("Giro y Avanzo");
				botonGiroYAvanzo.setBounds(341, 36, 131, 38);
				botonGiroYAvanzo.addActionListener(this);
				botonGiroYAvanzo.setActionCommand("giro y avanzo");
				botonGiroYAvanzo.setVisible(false);
			}
			{
				botonLyapunov = new JButton();
				getContentPane().add(botonLyapunov);
				botonLyapunov.setText("ver_optimo(*)");
				botonLyapunov.setBounds(341, 85, 131, 38);
				botonLyapunov.addActionListener(this);
				botonLyapunov.setActionCommand("ver optimo");
				botonLyapunov.setVisible(false);
			}
			{
				botonPontencial = new JButton();
				getContentPane().add(botonPontencial);
				botonPontencial.setText("Campos de Potencial");
				botonPontencial.setBounds(341, 134, 131, 41);
				botonPontencial.addActionListener(this);
				botonPontencial.setActionCommand("campos de potencial");
				botonPontencial.setVisible(false);
			}
			{
				labelR4 = new JLabel();
				getContentPane().add(labelR4);
				labelR4.setText("R:");
				labelR4.setBounds(494, 95, 24, 16);
				labelR4.setVisible(false);
			}
			{
				textR4 = new JTextField();
				getContentPane().add(textR4);
				textR4.setText("0");
				textR4.setBounds(518, 92, 57, 22);
				textR4.setVisible(false);
			}
			{
				botonConfiguracion = new JButton();
				getContentPane().add(botonConfiguracion);
				botonConfiguracion.setText("Configuracion");
				botonConfiguracion.setBounds(0, 283, 153, 56);
				botonConfiguracion.setActionCommand("configuracion");
				botonConfiguracion.addActionListener(this);
			}
			{
				labelModo = new JLabel();
				getContentPane().add(labelModo);
				labelModo.setText("Modo");
				labelModo.setBounds(205, 56, 50, 17);
			}
			{
				labelIP = new JLabel();
				getContentPane().add(labelIP);
				labelIP.setText("IP");
				labelIP.setBounds(205, 85, 32, 18);
			}
			{
				labelPuerto = new JLabel();
				getContentPane().add(labelPuerto);
				labelPuerto.setText("Puerto");
				labelPuerto.setBounds(205, 120, 43, 16);
			}
			{
				labelMI_ROBOT = new JLabel();
				getContentPane().add(labelMI_ROBOT);
				labelMI_ROBOT.setText("MI_ROBOT");
				labelMI_ROBOT.setBounds(205, 154, 63, 16);
			}
			{
				labelMAC = new JLabel();
				getContentPane().add(labelMAC);
				labelMAC.setText("MAC");
				labelMAC.setBounds(205, 199, 56, 16);
			}
			{
				textIP = new JTextField();
				getContentPane().add(textIP);
				textIP.setText(IP);
				textIP.setBounds(296, 83, 105, 22);
			}
			{
				textPuerto = new JTextField();
				getContentPane().add(textPuerto);
				textPuerto.setText(String.valueOf(PUERTO));
				textPuerto.setBounds(296, 117, 105, 22);
			}
			{
				textMI_ROBOT = new JTextField();
				getContentPane().add(textMI_ROBOT);
				textMI_ROBOT.setText(String.valueOf(ParametrosGlobales.MI_ROBOT));
				textMI_ROBOT.setBounds(296, 151, 105, 22);
			}
			{
				textMAC = new JTextField();
				getContentPane().add(textMAC);
				textMAC.setText(ParametrosGlobales.macRobot);
				textMAC.setBounds(296, 193, 105, 22);
			}
			{
				ComboBoxModel comboModoModel = 
					new DefaultComboBoxModel(
							new String[] { "SIMULADOR", "ENTORNO REAL" });
				comboModo = new JComboBox();
				getContentPane().add(comboModo);
				comboModo.setModel(comboModoModel);
				comboModo.setBounds(296, 50, 105, 22);
			}
			{
				botonSalvar = new JButton();
				getContentPane().add(botonSalvar);
				botonSalvar.setText("Salvar Configuracion");
				botonSalvar.setBounds(229, 263, 152, 22);
				botonSalvar.setActionCommand("salvar configuracion");
				botonSalvar.addActionListener(this);
			}
			{
				botonBorrarPuntos = new JButton();
				getContentPane().add(botonBorrarPuntos);
				botonBorrarPuntos.setText("Borrar puntos");
				botonBorrarPuntos.setBounds(205, 171, 119, 25);
				botonBorrarPuntos.setActionCommand("borrar puntos");
				botonBorrarPuntos.addActionListener(this);
			}
			{
				botonComenzarTrayectoria = new JButton();
				getContentPane().add(botonComenzarTrayectoria);
				botonComenzarTrayectoria.setText("Comenzar");
				botonComenzarTrayectoria.setBounds(203, 213, 121, 23);
				botonComenzarTrayectoria.setActionCommand("comenzar Trayectoria");
				botonComenzarTrayectoria.addActionListener(this);
			}
			{
				labelCantidadObj = new JLabel();
				getContentPane().add(labelCantidadObj);
				labelCantidadObj.setText("Cant. elem.");
				labelCantidadObj.setBounds(207, 232, 86, 16);
			}
			{
				textCantObjetos = new JTextField();
				getContentPane().add(textCantObjetos);
				textCantObjetos.setText(String.valueOf(ParametrosGlobales.CANTIDAD_OBJETOS));
				textCantObjetos.setBounds(298, 229, 94, 22);
			}
			{
				botonActualizar = new JButton();
				getContentPane().add(botonActualizar);
				botonActualizar.setText("Actualizar");
				botonActualizar.setBounds(521, 375, 109, 30);
				botonActualizar.setActionCommand("actualizar");
				botonActualizar.addActionListener(this);
			}
			{
				botonDirect = new JButton();
				getContentPane().add(botonDirect);
				botonDirect.setText("Direct");
				botonDirect.setBounds(343, 185, 129, 39);
				botonDirect.setActionCommand("direct");
				botonDirect.setSize(131, 41);
				botonDirect.addActionListener(this);
			}
			{
				botonPotencialUnidireccional = new JButton();
				getContentPane().add(botonPotencialUnidireccional);
				botonPotencialUnidireccional.setText("perseguir(*)");
				botonPotencialUnidireccional.setBounds(343, 243, 131, 42);
				botonPotencialUnidireccional.setActionCommand("perseguir");
				botonPotencialUnidireccional.addActionListener(this);
			}
			{
				textoAnguloEntradaX = new JTextField();
				getContentPane().add(textoAnguloEntradaX);
				textoAnguloEntradaX.setBounds(540, 252, 82, 23);
			}
			{
				textoAnguloEntradaY = new JTextField();
				getContentPane().add(textoAnguloEntradaY);
				textoAnguloEntradaY.setBounds(540, 294, 82, 22);
			}
			{
				labelAnguloEntradaX = new JLabel();
				getContentPane().add(labelAnguloEntradaX);
				labelAnguloEntradaX.setText("X:");
				labelAnguloEntradaX.setBounds(492, 255, 20, 16);
			}
			{
				labelAnguloEntradaY = new JLabel();
				getContentPane().add(labelAnguloEntradaY);
				labelAnguloEntradaY.setText("Y:");
				labelAnguloEntradaY.setBounds(492, 297, 29, 16);
			}
			{
				botonReset = new JButton();
				getContentPane().add(botonReset);
				botonReset.setText("Reset");
				botonReset.setBounds(0, 231, 153, 54);
				botonReset.setActionCommand("reset");
				botonReset.addActionListener(this);
			}
			{
				botonAvanzar = new JButton();
				getContentPane().add(botonAvanzar);
				botonAvanzar.setText("Avanzar");
				botonAvanzar.setBounds(215, 110, 121, 34);
				botonAvanzar.setActionCommand("avanzar");
				botonAvanzar.addActionListener(this);
			}
			{
				botonRetroceder = new JButton();
				getContentPane().add(botonRetroceder);
				botonRetroceder.setText("Retroceder");
				botonRetroceder.setBounds(389, 110, 126, 34);
				botonRetroceder.setActionCommand("retroceder");
				botonRetroceder.addActionListener(this);
			}
			{
				botonGuardarSimulacion = new JButton();
				getContentPane().add(botonGuardarSimulacion);
				botonGuardarSimulacion.setText("guardar Simulacion");
				botonGuardarSimulacion.setBounds(454, 51, 167, 30);
				botonGuardarSimulacion.setActionCommand("guardar simulacion");
				botonGuardarSimulacion.addActionListener(this);				
			}
			{
				botonCargarSimulacion = new JButton();
				getContentPane().add(botonCargarSimulacion);
				botonCargarSimulacion.setText("cargar Simulacion");
				botonCargarSimulacion.setBounds(454, 99, 167, 28);
				botonCargarSimulacion.setActionCommand("cargar simulacion");
				botonCargarSimulacion.addActionListener(this);
			}
			pack();
			this.setSize(710, 485);
			setAllVisible(false);
			botonReset.setVisible(false);
			jScrollPane1.setVisible(true);
			botonActualizar.setVisible(true);
			// Valor por defecto para el combo
			int indiceCombo = 1;
			if (control == simulador)
				indiceCombo = 0;
			comboModo.setSelectedIndex(indiceCombo);
			
			if(String.valueOf(comboModo.getSelectedItem()).equals("ENTORNO REAL")) {
				botonGuardarSimulacion.setEnabled(false);				
				botonCargarSimulacion.setEnabled(false);				
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("deprecation")
	@Override
	public void actionPerformed(ActionEvent arg0) {
		
		FuncionalidadD funcionalidad;
		
		if(arg0.getActionCommand().equals("ver coordenadas")){
			setAllVisible(false);
			jScrollPane1.setVisible(true);
			botonActualizar.setVisible(true);			
			
		}else if(arg0.getActionCommand().equals("actualizar")){
			
			while(tablaPosicionesModel.getRowCount()>0)
				tablaPosicionesModel.removeRow(0);
			
			try {
				Point3d miPosicion = control.getMiPosicion();
				String[] newRow = {"OBJ" + ParametrosGlobales.MI_ROBOT, String.valueOf(miPosicion.x),String.valueOf(miPosicion.y),String.valueOf(miPosicion.z)};
				tablaPosicionesModel.addRow(newRow);	
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			Point3d[] posiciones = null;
			try {
				posiciones = control.getPosicionesObstaculos();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			for(int identificador = 0; identificador<posiciones.length; identificador++) {				
				String id = "OBJ";
				if(identificador < ParametrosGlobales.MI_ROBOT){
					id = id + identificador;
				} else {
					id = id + (identificador + 1);
				}
				String[] newRow = {id, String.valueOf(posiciones[identificador].x),String.valueOf(posiciones[identificador].y),String.valueOf(posiciones[identificador].z)};
				tablaPosicionesModel.addRow(newRow);						
			}			
		}else if(arg0.getActionCommand().equals("avanzar trayectoria")){
			setAllVisible(false);
			labelX.setVisible(true);
			labelY.setVisible(true);
			textNuevoPtoY.setVisible(true);
			textNuevoPtoX.setVisible(true);
			botonNuevoPunto.setVisible(true);
			jScrollPane2.setVisible(true);
			botonComenzarTrayectoria.setVisible(true);
			botonBorrarPuntos.setVisible(true);			
			
		}else if(arg0.getActionCommand().equals("extras")){
			setAllVisible(false);			
			 botonAnguloOK.setVisible(true);			 
			 textAngulo.setVisible(true);
			 labelAngulo.setVisible(true);			
			 botonRetroceder.setVisible(true);
			 botonAvanzar.setVisible(true);
			 
		}else if(arg0.getActionCommand().equals("ir a un pto fijo")){
			 setAllVisible(false);			
			 textR4.setVisible(true);
			 labelR4.setVisible(true);
			 botonPontencial.setVisible(true);
			 botonLyapunov.setVisible(true);
			 botonGiroYAvanzo.setVisible(true);
			 botonDirect.setVisible(true);
			 textY4.setVisible(true);
			 textX4.setVisible(true);
			 labelY4.setVisible(true);
			 labelX4.setVisible(true);
			 botonPotencialUnidireccional.setVisible(true);
			 textoAnguloEntradaX.setVisible(true);
			 textoAnguloEntradaY.setVisible(true);
			 labelAnguloEntradaX.setVisible(true);
			 labelAnguloEntradaY.setVisible(true);
			
		}else if(arg0.getActionCommand().equals("beep")){			 
			
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.BEEP, listaDaemons);
			
			funcionalidad.start();
			 
		}else if(arg0.getActionCommand().equals("detener motores")){
			
			Iterator<FuncionalidadD> iteradorB = listaDaemons.iterator();
			while(iteradorB.hasNext()) {
				FuncionalidadD thread = iteradorB.next();
				iteradorB.remove();
				thread.stop();
			}
			
			try {				
				control.detenerMotores();
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("Error al detener motores.");
			}			
			
		}else if(arg0.getActionCommand().equals("salir")){
			
			try {
				control.detenerMotores();
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("Error al detener motores.");
			}
			System.exit(0);
			
		}else if(arg0.getActionCommand().equals("agregar punto")){
			
			String[] newRow = {textNuevoPtoX.getText() ,textNuevoPtoY.getText() };
			tablaTrayectoriaModel.addRow(newRow);
			textNuevoPtoX.setText("");
			textNuevoPtoY.setText("");
			
		}else if(arg0.getActionCommand().equals("angulo ok")){
			
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.GIRO_COMUN, listaDaemons);
			funcionalidad.setAnguloGiro(Double.parseDouble(textAngulo.getText()));
			
			funcionalidad.start();

		}else if(arg0.getActionCommand().equals("giro y avanzo")){		
			
			Point3d proxPunto = new Point3d(Double.parseDouble(textX4.getText()),Double.parseDouble(textY4.getText()),0);
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.GIRO_Y_AVANZO, listaDaemons);
			funcionalidad.setProximoPunto(proxPunto);
			
			funcionalidad.start();			

		}else if(arg0.getActionCommand().equals("ver optimo")){
						
			Point3d proxPunto = new Point3d(Double.parseDouble(textX4.getText()),Double.parseDouble(textY4.getText()),Double.parseDouble(textR4.getText()));
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.LYAPUNOV, listaDaemons);
			funcionalidad.setProximoPunto(proxPunto);
			
			funcionalidad.start();

		}else if(arg0.getActionCommand().equals("campos de potencial")){
			
			Point3d proxPunto = new Point3d(Double.parseDouble(textX4.getText()),Double.parseDouble(textY4.getText()),Double.parseDouble(textR4.getText()));
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.CAMPOS_DE_POTENCIAL, listaDaemons);
			funcionalidad.setProximoPunto(proxPunto);
			
			funcionalidad.start();	
			

		}else if(arg0.getActionCommand().equals("direct")){
			Point3d proxPunto = new Point3d(Double.parseDouble(textX4.getText()),Double.parseDouble(textY4.getText()),Double.parseDouble(textR4.getText()));
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.DIRECT, listaDaemons);
			funcionalidad.setProximoPunto(proxPunto);
			funcionalidad.start();				

		}else if(arg0.getActionCommand().equals("perseguir")){
			
//			Point3d anguloEntrada = new Point3d(Double.parseDouble(textoAnguloEntradaX.getText()),Double.parseDouble(textoAnguloEntradaY.getText()),0);
//			Point3d proxPunto = new Point3d(Double.parseDouble(textX4.getText()),Double.parseDouble(textY4.getText()),Double.parseDouble(textR4.getText()));
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.POTENCIAL_UNIDIRECCIONAL, listaDaemons);
//			funcionalidad.setProximoPunto(proxPunto);
//			funcionalidad.setAnguloEntrada(anguloEntrada);
			
			funcionalidad.start();				

		}else if(arg0.getActionCommand().equals("configuracion")){	
			setAllVisible(false);
			botonSalvar.setVisible(true);
			 comboModo.setVisible(true);
			 labelModo.setVisible(true);
			 textMI_ROBOT.setVisible(true);
			 labelMI_ROBOT.setVisible(true);
			 botonGuardarSimulacion.setVisible(true);
			 botonCargarSimulacion.setVisible(true);
			 /*
			 textMAC.setVisible(true);
			 labelMAC.setVisible(true);			 
			 textPuerto.setVisible(true);
			 textIP.setVisible(true);			 
			 labelPuerto.setVisible(true);
			 labelIP.setVisible(true);			 
			 labelCantidadObj.setVisible(true);
			 textCantObjetos.setVisible(true);
			 */

		}else if(arg0.getActionCommand().equals("salvar configuracion")){
			

			if(String.valueOf(comboModo.getSelectedItem()).equals("SIMULADOR")) {
				//entorno_real = false;					
				control = simulador;
				botonGuardarSimulacion.setEnabled(true);
				botonCargarSimulacion.setEnabled(true);
			} else {
				//entorno_real = true;
				control = entorno_real;
				botonGuardarSimulacion.setEnabled(false);
				botonCargarSimulacion.setEnabled(false);
			}

			//TODO comente esto porque pensamos manejar todo desde el archivo
//			IP = textIP.getText();
//			PUERTO = Integer.parseInt(textPuerto.getText());
//			MAC = textMAC.getText();
//			MI_ROBOT = Integer.parseInt(textMI_ROBOT.getText());
//			CANT_OBJETOS = Integer.parseInt(textCantObjetos.getText());

		}else if(arg0.getActionCommand().equals("borrar puntos")){
			
			while(tablaTrayectoriaModel.getRowCount() > 0)
				tablaTrayectoriaModel.removeRow(0);		
			

		}else if(arg0.getActionCommand().equals("comenzar Trayectoria")){			
			
			int cantRows = tablaTrayectoriaModel.getRowCount();
			Point3d[] trayectorias = new Point3d[cantRows];
			for (int i = 0; i< cantRows; i++) {				
				trayectorias[i] = new Point3d();
				trayectorias[i].x = Double.parseDouble(tablaTrayectoriaModel.getValueAt(i, 0).toString());
				trayectorias[i].y = Double.parseDouble(tablaTrayectoriaModel.getValueAt(i, 1).toString());
			}
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.COMENZAR_TRAYECTORIA, listaDaemons);
			funcionalidad.setProximosPuntos(trayectorias);
			
			funcionalidad.start();
		}else if(arg0.getActionCommand().equals("avanzar")){			
			
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.AVANZAR, listaDaemons);
						
			funcionalidad.start();
		}else if(arg0.getActionCommand().equals("retroceder")){		
			funcionalidad = new FuncionalidadD(control, FuncionalidadD.RETROCEDER, listaDaemons);
						
			funcionalidad.start();
		}else if(arg0.getActionCommand().equals("cargar simulacion")){				
			
			try {
				//String path = JOptionPane.showInputDialog(null,"Path:(debe emepezar y terminar con '/')", new File("").getAbsolutePath() + "/");
				String path = new File("").getAbsolutePath() + "/";
				String file = JOptionPane.showInputDialog(null,"Nombre de Archivo: (debe terminar con la extension \".xml\")", "SimulacionInicial.xml");
				
				if(path != null && file !=null  && !path.equals("") && !file.equals("")) {
					control.entorno.detenerMotores();
					System.out.println("Cargando simulacion");
					control.entorno.cargarSimulacion(path, file);
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}else if(arg0.getActionCommand().equals("guardar simulacion")){		
			
			try {				
				//String path = JOptionPane.showInputDialog(null,"Path:(debe emepezar y terminar con '/')", new File("").getAbsolutePath() + "/");
				String path = new File("").getAbsolutePath() + "/";
				String file = JOptionPane.showInputDialog(null,"Nombre de Archivo: (debe terminar con la extension \".xml\")", "SimulacionInicial.xml");
				
				if(path != null && file != null && !path.equals("") && !file.equals("")) {
					System.out.println("Guardando simulacion");
					control.entorno.guardarSimulacion(path, file);
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}		
	}
	
	void setAllVisible(boolean arg) {
		 jScrollPane1.setVisible(arg);
		 jScrollPane2.setVisible(arg);
		 labelY4.setVisible(arg);
		 labelX4.setVisible(arg);
		 botonSalvar.setVisible(arg);
		 comboModo.setVisible(arg);
		 textMAC.setVisible(arg);
		 textMI_ROBOT.setVisible(arg);
		 textPuerto.setVisible(arg);
		 textIP.setVisible(arg);
		 labelMAC.setVisible(arg);
		 labelMI_ROBOT.setVisible(arg);
		 labelPuerto.setVisible(arg);
		 labelIP.setVisible(arg);
		 labelModo.setVisible(arg);		 
		 textR4.setVisible(arg);
		 labelR4.setVisible(arg);
		 botonPontencial.setVisible(arg);
		 botonLyapunov.setVisible(arg);
		 botonGiroYAvanzo.setVisible(arg);
		 textY4.setVisible(arg);
		 textX4.setVisible(arg);
		 botonAnguloOK.setVisible(arg);		 
		 textAngulo.setVisible(arg);
		 labelAngulo.setVisible(arg);
		 labelX.setVisible(arg);
		 labelY.setVisible(arg);
		 textNuevoPtoY.setVisible(arg);
		 textNuevoPtoX.setVisible(arg);
		 botonNuevoPunto.setVisible(arg);
		 botonComenzarTrayectoria.setVisible(arg);
		 botonBorrarPuntos.setVisible(arg);
		 labelCantidadObj.setVisible(arg);
		 textCantObjetos.setVisible(arg);
		 botonActualizar.setVisible(arg);
		 botonDirect.setVisible(arg);
		 botonPotencialUnidireccional.setVisible(arg);
		 textoAnguloEntradaX.setVisible(arg);
		 textoAnguloEntradaY.setVisible(arg);
		 labelAnguloEntradaX.setVisible(arg);
		 labelAnguloEntradaY.setVisible(arg);
		 botonRetroceder.setVisible(arg);
		 botonAvanzar.setVisible(arg);
		 botonGuardarSimulacion.setVisible(arg);
		 botonCargarSimulacion.setVisible(arg);
	}

}